package br.com.gestacard.sync.controle.jsf.formulario;

import java.util.Collection;

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

import br.com.gestacard.sync.controle.jsf.AppAction;
import br.com.gestacard.sync.entidade.CaptadorEntity;
import br.com.gestacard.sync.entidade.ControleProcessamento;
import br.com.gestacard.sync.entidade.FormularioEntity;
import br.com.gestacard.sync.entidade.ProdutoEntity;
import br.com.gestacard.sync.entidade.SubFormulario;
import br.com.gestacard.sync.facade.IAppFacade;

import com.powerlogic.jcompany.comuns.PlcException;
import com.powerlogic.jcompany.config.comuns.PlcConstantes;
import com.powerlogic.jcompany.config.comuns.PlcConstantes.PlcJsfConstantes.NAVEGACAO;

/**
 * Classe de Controle gerada pelo assistente
 */
@SuppressWarnings("unchecked")
public class FormularioAction extends AppAction {

	private static final long serialVersionUID = 2803929256239772405L;

	@Override
	protected void trataBotoesConformeLogicaApos() throws PlcException {
		HttpServletRequest request = (HttpServletRequest) FacesContext
				.getCurrentInstance().getExternalContext().getRequest();

		if (entidadePlc != null) {
			FormularioEntity  formularioEntity = (FormularioEntity) entidadePlc;
			if (formularioEntity.getControleProcessamento().equals(ControleProcessamento.P)) {
				request.setAttribute(PlcConstantes.ACAO.EXIBE_BT_EXCLUIR, "N");
				request.setAttribute(PlcConstantes.ACAO.EXIBE_BT_GRAVAR, "N");
			}
		}
		super.trataBotoesConformeLogicaApos();
	}
	
	@Override
	protected boolean novoDetalheAntes(Collection colecao) throws PlcException {

		if (colecao != null && colecao.size() == 20) {
			throw new PlcException("erro.mais.20.subformulario");
		}

		return super.novoDetalheAntes(colecao);
	}

	@Override
	public String grava() throws PlcException {
		FormularioEntity formularioEntity = (FormularioEntity) entidadePlc;

		IAppFacade facade = (IAppFacade) getServiceFacade();
		if (formularioEntity.getId() == null) {

			ProdutoEntity produtoEntity = (ProdutoEntity) facade.buscaPorId(
					"ProdutoEntity", formularioEntity.getProduto().getId());

			formularioEntity.setValorProduto(produtoEntity.getVlrProduto());
			formularioEntity.setComissaoCaptador(produtoEntity
					.getComissaoCaptador());
			formularioEntity.setComissaoCoordenador(produtoEntity
					.getComissaoCoordenador());
		}
		int i = 0;
		boolean controle = true;
		for (SubFormulario subFormulario : formularioEntity.getSubFormularios()) {
			i++;
			
			CaptadorEntity captadorEntity =  (CaptadorEntity) facade.buscaPorId(
					"CaptadorEntity", subFormulario.getCaptador().getId());
			
			if(!captadorEntity.getCoordenador().getId().equals(formularioEntity.getCoordenador().getId())){
				controle = false;
				helperMsgJsfPlc.msgErro("erro.captador.coordenador", new Object[]{formularioEntity.getCoordenador().getNome(), captadorEntity.getNome() ,i});
			}
			
		}
		if(controle)
			return super.grava();
		else
			return NAVEGACAO.IND_MESMA_PAGINA;
	}
	
	
}
